1 Introduction

Here, we will cluster the tumoral cells for case 413.

2 Pre-processing

2.1 Load packages

library(Seurat)
library(Signac)
library(SLOcatoR)
library(EnsDb.Hsapiens.v86)
library(ggpubr)
library(tidyverse)
library(pals)
library(openxlsx)
library(here)

#library(presto)
library(DT)
set.seed(173)

2.2 Define paths and parameters

path_to_obj <- here("MCL/results/R_objects/6.seurat_tumoral_413.rds")
path_to_save_xlsx<- here("MCL/3-clustering/tmp/7.seurat_tumoral_413_clustered_markers.xlsx")
path_to_save_obj <- here("MCL/results/R_objects/7.seurat_tumoral_413_clustered.rds")
path_to_save_shiny_metadata <- here("MCL/results/R_objects/7.seurat_tumoral_413_clustered_shiny_metadata.rds")
path_to_save_shiny_expression <- here("MCL/results/R_objects/7.seurat_tumoral_413_clustered_shiny_expression.rds")


# Colors
color_palette <-  c("#E6194B", "#3CB44B", "#FFD8B1", "#4363D8", "#F58231",
                    "#911EB4", "#46F0F0", "#F032E6", "#BCF60C", "#FABEBE",
                    "#008080", "#E6BEFF", "#9A6324", "#FFFAC8", "#800000",
                    "#AAFFC3", "#808000", "#FFE119", "#000075", "#808080",
                    "#000000", "tan", "darkgrey")


# Source functions
source(here::here("scRNA-seq/bin/utils.R"))


# Thresholds
chrY_cutoff <- 0

2.3 Read data

seurat <- readRDS(path_to_obj)
# seurat[["ATAC"]] <- NULL

3 Dimensionality reduction

Let us score each cell for cell cycling singatures:

seurat <- CellCycleScoring(
  seurat,
  s.features = cc.genes$s.genes,
  g2m.features = cc.genes$g2m.genes
)
FeaturePlot(seurat, c("G2M.Score", "S.Score")) &
  scale_color_viridis_c(option = "magma")

Since we subsetted the CD79A+ cells, let us rerun the general pipeline for dimensionality reduction:

seurat <- seurat %>%
  FindVariableFeatures() %>%
  ScaleData() %>%
  RunPCA() %>%
  RunUMAP(dims = 1:20, reduction = "pca")
DimPlot(seurat, cols = color_palette, reduction = "umap")

4 Classify chry +/-

Exploring our data, we have observed that the two main “blobs” might be two subclones, one chrY+ and the other chrY. Loss of chromosome Y is a known feature of MCL:

FeaturePlot(
  seurat,
  features = c("UTY", "KDM5D", "DDX3Y", "USP9Y", "ZFY", "EIF1AY"),
  reduction = "umap"
) &
  scale_color_viridis_c(option = "magma")

Let us convert the expression of all genes located in chrY in a single score:

# annotations <- GetGRangesFromEnsDb(ensdb = EnsDb.Hsapiens.v86)
# seqlevelsStyle(annotations) <- "UCSC"
# annotations_chrY <- annotations[annotations@seqnames == "chrY", "gene_name"]
# goi_chrY <- unique(annotations_chrY$gene_name)
goi_chrY <- c("UTY", "KDM5D", "DDX3Y", "USP9Y", "ZFY", "EIF1AY")
seurat <- AddModuleScore(seurat, features = list(goi_chrY), name = "chrY_score")
FeaturePlot(seurat, "chrY_score1", reduction = "umap")

(density_gg <- seurat@meta.data %>%
  ggplot(aes(chrY_score1)) +
  geom_density() +
  geom_vline(xintercept = chrY_cutoff, linetype = "dashed", color = "darkblue") +
  theme_classic())

seurat$has_loss_chrY <- ifelse(
  seurat$chrY_score1 > chrY_cutoff,
  "chrY+",
  "chrY-"
)
DimPlot(seurat, group.by = "has_loss_chrY", reduction = "umap")

5 Cluster

seurat <- FindNeighbors(seurat, dims = 1:20, reduction = "pca")
seurat <- FindClusters(seurat, resolution = 0.75)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 23913
## Number of edges: 746436
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8514
## Number of communities: 16
## Elapsed time: 6 seconds
DimPlot(seurat, cols = color_palette, reduction = "umap")

FeaturePlot(seurat, c("CD8A", "CD3D"), reduction = "umap", order = TRUE)

Let us subcluster and eliminate residual T cells:

seurat <- FindSubCluster(
  seurat,
  cluster = "10",
  graph.name = "RNA_snn",
  subcluster.name = "T_cells",
  resolution = 0.25
)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 927
## Number of edges: 23415
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8519
## Number of communities: 3
## Elapsed time: 0 seconds
DimPlot(seurat, group.by = "T_cells", reduction = "umap", cols = color_palette)

Idents(seurat) <- "T_cells"
markers_t <- FindMarkers(seurat, ident.1 = "10_2", ident.2 = c("10_1", "10_0"))
head(markers_t, 40)
##                  p_val avg_log2FC pct.1 pct.2     p_val_adj
## MKI67    1.043457e-141  2.3751449 0.828 0.026 3.819157e-137
## RRM2     2.577983e-127  2.3148350 0.783 0.030 9.435677e-123
## TOP2A    2.274938e-121  2.6798194 0.778 0.044 8.326502e-117
## ASPM     4.174608e-119  2.5236685 0.700 0.017 1.527948e-114
## CENPF    8.410013e-103  2.3147495 0.719 0.054  3.078149e-98
## DIAPH3   1.806515e-100  1.8645610 0.734 0.062  6.612026e-96
## MELK      2.230226e-95  1.4371359 0.631 0.029  8.162852e-91
## NUSAP1    9.276000e-95  1.9268140 0.724 0.073  3.395109e-90
## KIF11     5.168878e-94  1.4385145 0.724 0.068  1.891861e-89
## TPX2      4.404597e-87  1.3922512 0.542 0.015  1.612126e-82
## HMGB2     3.590202e-86  2.3896849 0.754 0.115  1.314050e-81
## AURKB     7.597648e-85  1.1130806 0.498 0.006  2.780815e-80
## NCAPG     4.063483e-84  1.2856596 0.522 0.014  1.487275e-79
## KIF15     2.129373e-81  1.4322701 0.611 0.050  7.793717e-77
## SMC4      7.912151e-80  2.1650445 0.872 0.240  2.895926e-75
## CLSPN     1.095168e-77  1.2488586 0.532 0.026  4.008425e-73
## TUBA1B    3.747215e-77  2.6208109 0.793 0.191  1.371518e-72
## POLQ      1.686194e-76  1.4728983 0.670 0.086  6.171639e-72
## HIST1H3B  2.519404e-76  1.2356485 0.483 0.012  9.221271e-72
## KNL1      4.178171e-76  1.5832715 0.695 0.104  1.529252e-71
## CDK1      3.989078e-75  0.9523537 0.453 0.007  1.460043e-70
## ANLN      1.571796e-73  1.0300879 0.438 0.006  5.752930e-69
## GTSE1     1.169896e-72  1.1080160 0.458 0.012  4.281937e-68
## CENPE     3.151369e-72  1.9105031 0.601 0.066  1.153433e-67
## EZH2      1.316891e-71  1.8266824 0.897 0.297  4.819953e-67
## SPC25     3.994174e-71  1.0604885 0.473 0.018  1.461908e-66
## BUB1B     6.232504e-71  1.1112954 0.512 0.032  2.281159e-66
## KIF14     2.074754e-68  1.2854870 0.443 0.014  7.593808e-64
## NCAPG2    8.297068e-68  1.5298182 0.714 0.134  3.036810e-63
## KIF4A     2.147565e-67  1.0181069 0.443 0.015  7.860301e-63
## FANCI     5.138002e-67  1.3605587 0.680 0.112  1.880560e-62
## DLGAP5    1.639140e-66  1.2054163 0.429 0.012  5.999415e-62
## ITM2A     9.278172e-65  1.6953123 0.537 0.054  3.395904e-60
## NUF2      1.474047e-64  1.2075440 0.547 0.054  5.395158e-60
## NCAPH     1.689594e-64  0.8947618 0.419 0.012  6.184082e-60
## STMN1     1.777636e-64  1.9177668 0.773 0.211  6.506326e-60
## CD3D      2.884926e-64  1.5528943 0.665 0.117  1.055912e-59
## NDC80     3.335047e-64  1.1382212 0.527 0.048  1.220660e-59
## HIST1H1B  3.404230e-64  1.4034828 0.562 0.064  1.245982e-59
## NEIL3     7.962928e-64  1.0381171 0.404 0.010  2.914511e-59
markers_t2 <- FindMarkers(seurat, ident.1 = "10_2", ident.2 = "9")
head(markers_t2, 40)
##                    p_val avg_log2FC pct.1 pct.2     p_val_adj
## BCL11B     1.704262e-195   2.702679 0.862 0.036 6.237768e-191
## PAM        2.720978e-177   2.417499 0.788 0.031 9.959052e-173
## THEMIS     1.317103e-176   2.636036 0.764 0.025 4.820729e-172
## CD2        1.892559e-174   2.064308 0.739 0.020 6.926954e-170
## FYB1       2.957030e-174   2.437955 0.877 0.065 1.082303e-169
## INPP4B     1.672006e-171   2.394885 0.773 0.031 6.119710e-167
## PRKCH      3.131745e-170   2.941544 0.916 0.093 1.146250e-165
## TOX        9.339274e-167   3.725906 0.837 0.062 3.418268e-162
## ST8SIA1    1.058037e-166   2.175798 0.729 0.025 3.872520e-162
## CD96       1.080878e-153   1.887644 0.700 0.027 3.956121e-149
## CD247      4.029037e-152   1.916187 0.700 0.029 1.474668e-147
## HNRNPLL    2.846110e-151   1.876901 0.665 0.021 1.041705e-146
## SKAP1      8.193476e-143   2.485208 0.921 0.129 2.998894e-138
## GPRIN3     2.749292e-133   1.730662 0.621 0.024 1.006268e-128
## IL32       3.088190e-129   2.042565 0.631 0.031 1.130308e-124
## CD3D       4.844917e-127   1.764004 0.665 0.043 1.773288e-122
## LINC01934  2.692531e-123   3.111542 0.680 0.056 9.854932e-119
## LCP2       3.269600e-123   1.221559 0.616 0.031 1.196706e-118
## ICOS       6.805913e-123   1.376099 0.498 0.005 2.491032e-118
## ITK        3.921903e-121   1.456428 0.591 0.028 1.435456e-116
## CDK6       2.926085e-120   1.415366 0.537 0.015 1.070976e-115
## CD28       1.233079e-111   1.090352 0.478 0.010 4.513192e-107
## RASGRP1    2.577229e-111   1.647563 0.635 0.052 9.432915e-107
## GZMK       1.022253e-110   2.154594 0.557 0.029 3.741548e-106
## TNIK       8.054632e-109   1.590978 0.512 0.019 2.948076e-104
## TRAC       4.069832e-108   1.750100 0.626 0.052 1.489599e-103
## CD3E       1.940080e-107   1.138556 0.478 0.013 7.100888e-103
## PLCL1      1.838231e-104   1.602644 0.502 0.021 6.728110e-100
## TC2N       7.825033e-103   1.524254 0.591 0.047  2.864040e-98
## PRKCQ      2.502261e-101   1.204971 0.478 0.017  9.158526e-97
## MIR181A1HG  4.636533e-96   1.411961 0.419 0.009  1.697017e-91
## CD3G        2.197212e-95   1.023576 0.453 0.016  8.042014e-91
## MLLT3       2.737132e-95   1.586630 0.581 0.052  1.001818e-90
## DTHD1       3.640850e-95   1.320979 0.424 0.011  1.332587e-90
## CAMK4       8.144515e-95   1.351471 0.443 0.015  2.980974e-90
## NCALD       8.785354e-95   1.831177 0.458 0.019  3.215527e-90
## TRBC1       3.840501e-94   2.010028 0.473 0.023  1.405662e-89
## ITM2A       2.199969e-92   1.722423 0.537 0.042  8.052106e-88
## NIBAN1      2.482489e-92   1.597467 0.532 0.041  9.086157e-88
## AAK1        5.114678e-92   1.467465 0.640 0.079  1.872023e-87
seurat <- subset(seurat, T_cells != "10_2") # cluster 10_2 expresses T cell markers
DimPlot(seurat, reduction = "umap")

We will try to find “mirror” clusters in both subclones (chrY+/-):

seurat <- FindNeighbors(seurat, dims = 1:20, reduction = "pca")
seurat <- FindClusters(seurat, resolution = 0.1)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 23710
## Number of edges: 741258
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9460
## Number of communities: 6
## Elapsed time: 5 seconds
DimPlot(seurat, reduction = "umap")

# chrY-
Idents(seurat) <- "seurat_clusters"
seurat <- FindSubCluster(
  seurat,
  cluster = "0",
  graph.name = "RNA_snn",
  subcluster.name = "chrYneg",
  resolution = 0.15
)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 11214
## Number of edges: 332740
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8833
## Number of communities: 3
## Elapsed time: 2 seconds
DimPlot(seurat, group.by = "chrYneg", reduction = "umap")

Idents(seurat) <- "chrYneg"
markers_0 <- FindAllMarkers(seurat, only.pos = TRUE, logfc.threshold = 0.8)
markers_0_0 <- FindMarkers(
  seurat,
  ident.1 = "0_0",
  ident.2 = c("0_1", "0_2"),
  only.pos = TRUE,
  logfc.threshold = 0.5
)
markers_0_1 <- FindMarkers(
  seurat,
  ident.1 = "0_1",
  ident.2 = c("0_0", "0_2"),
  only.pos = TRUE,
  logfc.threshold = 0.75
)
markers_0_2 <- FindMarkers(
  seurat,
  ident.1 = "0_2",
  ident.2 = c("0_1", "0_0"),
  only.pos = TRUE,
  logfc.threshold = 0.75
)
DT::datatable(markers_0_0, options = list(scrollX = TRUE))
DT::datatable(markers_0_1, options = list(scrollX = TRUE))
DT::datatable(markers_0_2, options = list(scrollX = TRUE))
seurat_chrYneg <- subset(seurat, idents = c("0_0", "0_1", "0_2"))
goi_chrY_neg <- rev(c("RIPOR2", "MARCH1", "PCDH9", "CCND3", "CD38", "TRAF5",
                      "PRDM2", "RGS2", "CXCR4", "CD83", "EZR", "JUNB", "CD55", "BACH2", "BACH1", "CD69",
                      "MIR155HG", "IL21R", "NFKBID", "BATF", "IRF4", "NFATC1"))
DotPlot(
  seurat_chrYneg,
  features = goi_chrY_neg) +
  coord_flip()

# chrY+
Idents(seurat) <- "seurat_clusters"
seurat <- FindSubCluster(
  seurat,
  cluster = "1",
  graph.name = "RNA_snn",
  subcluster.name = "chrYpos",
  resolution = 0.15
)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 10187
## Number of edges: 326704
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9019
## Number of communities: 5
## Elapsed time: 1 seconds
DimPlot(seurat, group.by = "chrYpos", reduction = "umap")

Idents(seurat) <- "chrYpos"
# markers_0 <- FindAllMarkers(seurat, only.pos = TRUE, logfc.threshold = 0.8)
markers_1_0 <- FindMarkers(
  seurat,
  ident.1 = "1_0",
  ident.2 = c("1_1", "1_2", "1_3", "1_4"),
  only.pos = TRUE,
  logfc.threshold = 0.5
)
markers_1_1 <- FindMarkers(
  seurat,
  ident.1 = "1_1",
  ident.2 = c("1_0", "1_2", "1_3", "1_4"),
  only.pos = TRUE,
  logfc.threshold = 0.5
)
markers_1_2 <- FindMarkers(
  seurat,
  ident.1 = "1_2",
  ident.2 = c("1_0", "1_1", "1_3", "1_4"),
  only.pos = TRUE,
  logfc.threshold = 0.5
)
markers_1_3 <- FindMarkers(
  seurat,
  ident.1 = "1_3",
  ident.2 = c("1_0", "1_1", "1_2", "1_4"),
  only.pos = TRUE,
  logfc.threshold = 0.5
)
markers_1_4 <- FindMarkers(
  seurat,
  ident.1 = "1_4",
  ident.2 = c("1_0", "1_1", "1_2", "1_3"),
  only.pos = TRUE,
  logfc.threshold = 0.5
)
DT::datatable(markers_1_0, options = list(scrollX = TRUE))
DT::datatable(markers_1_1, options = list(scrollX = TRUE))
DT::datatable(markers_1_2, options = list(scrollX = TRUE))
DT::datatable(markers_1_3, options = list(scrollX = TRUE))
DT::datatable(markers_1_4, options = list(scrollX = TRUE))
seurat_chrYpos <- subset(seurat, idents = c("1_0", "1_1", "1_2", "1_3", "1_4"))
goi_chrY_pos <- rev(c("PRDM2", "RGS2", "CXCR4", "CD83", "EZR", "JUNB", "CD55", "FOS", "ZNF331",
                      "TSHZ2", "CCSER1", "MECOM", "AFF2", "MARCH1",
                       "MIR155HG", "IL21R", "NFKBID", "BATF", "IRF4", "NFATC1", "CCL22",
                       "MT-ND2", "MT-ND1"))
DotPlot(
  seurat_chrYpos,
  features = goi_chrY_pos) +
  coord_flip()

Final clusters:

seurat$final_clusters <- seurat$chrYneg
seurat$final_clusters[seurat$final_clusters == "1"] <- str_subset(seurat$chrYpos, "^1_")
Idents(seurat) <- "final_clusters"
DimPlot(seurat, group.by = "final_clusters", reduction = "umap")

Summary clusters chrY-:

  • 0_0: MARCH1+PCDH9+CD83+PRDM2+
  • 0_1: CD69+JUNB+CXCR4+CD83+RGS2+
  • 0_2: MIR155HG+NKBID+

Summary clusters chrY+:

  • 1_0: undefined, need to stratify
  • 1_1: CD69+JUNB+CXCR4+CD83+RGS2+
  • 1_2: TSHZ2+CCSER1+MARCH1+
  • 1_3: MIR155HG+NKBID+
  • 1_4: poor-quality cells

Let us subset poor-quality cells and doublets:

seurat <- seurat[, !(seurat$final_clusters %in% c("1_4", "3"))]
DimPlot(seurat, reduction = "umap")

6 Annotation

seurat$annotation_20220523 <- case_when(
  seurat$final_clusters == "0_0" ~ "chrY- PCDH9+MARCH1+",
  seurat$final_clusters == "0_1" ~ "chrY- CD69+JUNB+CXCR4+",
  seurat$final_clusters == "0_2" ~ "chrY- MIR155HG+NFKB1+MYC+",
  seurat$final_clusters == "1_0" ~ "undefined",
  seurat$final_clusters == "1_1" ~ "chrY+ CD69+JUNB+CXCR4+",
  seurat$final_clusters == "1_2" ~ "chrY+ TSHZ2+MARCH1+",
  seurat$final_clusters == "1_3" ~ "chrY+ MIR155HG+NFKB1+MYC+",
  seurat$final_clusters == "2" ~ "cycling",
  seurat$final_clusters == "4" ~ "non-tumoral B-cells",
  seurat$final_clusters == "5" ~ "non-tumoral B-cells"
)
Idents(seurat) <- "annotation_20220523"
seurat <- FindNeighbors(seurat, dims = 1:20, reduction = "pca")
seurat <- FindSubCluster(
  seurat,
  cluster = "cycling",
  graph.name = "RNA_snn",
  resolution = 0.1,
  subcluster.name = "cycling"
)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 876
## Number of edges: 26265
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9445
## Number of communities: 2
## Elapsed time: 0 seconds
DimPlot(seurat, group.by = "cycling", reduction = "umap")

seurat$annotation_20220523[seurat$cycling == "cycling_0"] <- "Cycling tumoral"
seurat$annotation_20220523[seurat$cycling == "cycling_1"] <- "non-tumoral B-cells"
Idents(seurat) <- "annotation_20220523"
DimPlot(seurat, reduction = "umap")

7 Save

#openxlsx::write.xlsx(list(markers = markers), file = path_to_save_xlsx)
saveRDS(seurat, path_to_save_obj)

Save input to shiny app:

#input_shiny <- seurat2shiny(
#  seurat,
#  assay = "RNA",
#  slot = "data",
#  reduction = "umap"
#)
#saveRDS(input_shiny$metadata, path_to_save_shiny_metadata)
#saveRDS(input_shiny$expression, path_to_save_shiny_expression)

8 Session information

sessionInfo()
## R version 4.2.0 (2022-04-22)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.2 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=es_ES.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=es_ES.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=es_ES.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] DT_0.22                   here_1.0.1                openxlsx_4.2.5            pals_1.7                  forcats_0.5.1             stringr_1.4.0             dplyr_1.0.8               purrr_0.3.4               readr_2.1.2               tidyr_1.2.0               tibble_3.1.6              tidyverse_1.3.1           ggpubr_0.4.0              ggplot2_3.3.5             EnsDb.Hsapiens.v86_2.99.0 ensembldb_2.19.10         AnnotationFilter_1.19.0   GenomicFeatures_1.47.14   AnnotationDbi_1.57.1      Biobase_2.55.2            GenomicRanges_1.47.6      GenomeInfoDb_1.31.10      IRanges_2.29.1            S4Vectors_0.33.17         BiocGenerics_0.41.2       SLOcatoR_0.0.0.9000       Signac_1.6.0              SeuratObject_4.0.4        Seurat_4.1.0              BiocStyle_2.23.1         
## 
## loaded via a namespace (and not attached):
##   [1] rappdirs_0.3.3              SnowballC_0.7.0             rtracklayer_1.55.4          scattermore_0.8             ModelMetrics_1.2.2.2        bit64_4.0.5                 knitr_1.38                  irlba_2.3.5                 DelayedArray_0.21.2         data.table_1.14.2           rpart_4.1.16                KEGGREST_1.35.0             hardhat_0.2.0               RCurl_1.98-1.6              generics_0.1.2              cowplot_1.1.1               RSQLite_2.2.12              RANN_2.6.1                  future_1.25.0               tzdb_0.3.0                  bit_4.0.4                   spatstat.data_2.2-0         xml2_1.3.3                  lubridate_1.8.0             httpuv_1.6.5                SummarizedExperiment_1.25.3 assertthat_0.2.1            gower_1.0.0                 xfun_0.30                   hms_1.1.1                   jquerylib_0.1.4             evaluate_0.15               promises_1.2.0.1            fansi_1.0.3                 restfulr_0.0.13             progress_1.2.2              readxl_1.4.0                dbplyr_2.1.1                igraph_1.3.1                DBI_1.1.2                   htmlwidgets_1.5.4           sparsesvd_0.2              
##  [43] spatstat.geom_2.4-0         ellipsis_0.3.2              crosstalk_1.2.0             RSpectra_0.16-1             backports_1.4.1             bookdown_0.26               biomaRt_2.51.4              deldir_1.0-6                MatrixGenerics_1.7.0        vctrs_0.4.1                 ROCR_1.0-11                 abind_1.4-5                 caret_6.0-92                cachem_1.0.6                withr_2.5.0                 ggforce_0.3.3               sctransform_0.3.3           GenomicAlignments_1.31.2    prettyunits_1.1.1           goftest_1.2-3               cluster_2.1.3               lazyeval_0.2.2              crayon_1.5.1                labeling_0.4.2              recipes_0.2.0               pkgconfig_2.0.3             slam_0.1-50                 tweenr_1.0.2                nlme_3.1-157                ProtGenerics_1.27.2         nnet_7.3-17                 rlang_1.0.2                 globals_0.14.0              lifecycle_1.0.1             miniUI_0.1.1.1              filelock_1.0.2              BiocFileCache_2.3.5         modelr_0.1.8                dichromat_2.0-0             rprojroot_2.0.3             cellranger_1.1.0            polyclip_1.10-0            
##  [85] matrixStats_0.62.0          lmtest_0.9-40               Matrix_1.4-1                ggseqlogo_0.1               carData_3.0-5               zoo_1.8-10                  reprex_2.0.1                ggridges_0.5.3              png_0.1-7                   viridisLite_0.4.0           rjson_0.2.21                bitops_1.0-7                KernSmooth_2.23-20          pROC_1.18.0                 Biostrings_2.63.3           blob_1.2.3                  parallelly_1.31.1           spatstat.random_2.2-0       rstatix_0.7.0               ggsignif_0.6.3              scales_1.2.0                memoise_2.0.1               magrittr_2.0.3              plyr_1.8.7                  ica_1.0-2                   zlibbioc_1.41.0             compiler_4.2.0              BiocIO_1.5.0                RColorBrewer_1.1-3          fitdistrplus_1.1-8          Rsamtools_2.11.0            cli_3.3.0                   XVector_0.35.0              listenv_0.8.0               patchwork_1.1.1             pbapply_1.5-0               MASS_7.3-56                 mgcv_1.8-40                 tidyselect_1.1.2            stringi_1.7.6               highr_0.9                   yaml_2.3.5                 
## [127] ggrepel_0.9.1               grid_4.2.0                  sass_0.4.1                  fastmatch_1.1-3             tools_4.2.0                 future.apply_1.9.0          parallel_4.2.0              rstudioapi_0.13             foreach_1.5.2               lsa_0.73.2                  gridExtra_2.3               prodlim_2019.11.13          farver_2.1.0                Rtsne_0.16                  digest_0.6.29               BiocManager_1.30.17         shiny_1.7.1                 lava_1.6.10                 qlcMatrix_0.9.7             Rcpp_1.0.8.3                car_3.0-12                  broom_0.8.0                 later_1.3.0                 harmony_0.1.0               RcppAnnoy_0.0.19            httr_1.4.2                  colorspace_2.0-3            rvest_1.0.2                 fs_1.5.2                    XML_3.99-0.9                tensor_1.5                  reticulate_1.24             splines_4.2.0               uwot_0.1.11                 RcppRoll_0.3.0              spatstat.utils_2.3-0        mapproj_1.2.8               plotly_4.10.0               xtable_1.8-4                jsonlite_1.8.0              timeDate_3043.102           ipred_0.9-12               
## [169] R6_2.5.1                    pillar_1.7.0                htmltools_0.5.2             mime_0.12                   glue_1.6.2                  fastmap_1.1.0               BiocParallel_1.29.21        class_7.3-20                codetools_0.2-18            maps_3.4.0                  utf8_1.2.2                  lattice_0.20-45             bslib_0.3.1                 spatstat.sparse_2.1-1       curl_4.3.2                  leiden_0.3.9                zip_2.2.0                   limma_3.51.8                survival_3.3-1              rmarkdown_2.14              docopt_0.7.1                munsell_0.5.0               GenomeInfoDbData_1.2.8      iterators_1.0.14            haven_2.5.0                 reshape2_1.4.4              gtable_0.3.0                spatstat.core_2.4-2